package com.easthome.controller;

import com.easthome.constant.MessageConstant;
import com.easthome.constant.RedisMessageConstant;
import com.easthome.result.Result;
import com.easthome.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Map;

/**
 * 手机端预约功能
 */
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private OrderService orderService;
    @Autowired
    private JedisPool jedisPool;

    /**
     * 提交预约信息
     * 体检预约方法处理逻辑比较复杂，需要进行如下业务处理：
     * 1、检查用户所选择的预约日期是否已经提前进行了预约设置，如果没有设置则无法进行预约
     * 2、检查用户所选择的预约日期是否已经约满，如果已经约满则无法预约
     * 3、检查用户是否重复预约（同一个用户在同一天预约了同一个套餐），如果是重复预约则无法完成再次预约
     * 4、检查当前用户是否为会员，如果是会员则直接完成预约，如果不是会员则自动完成注册并进行预约
     * 5、预约成功，更新当日的已预约人数
     * @param map
     * @return
     */
    @PostMapping("/saveOrder")
    public Result saveOrder(@RequestBody Map<String,String> map){
        //从map集合中取出验证码和手机号
        String telephone = map.get("telephone");
        String validateCode = map.get("validateCode");
        //从redis中取出验证码
        Jedis jedis = jedisPool.getResource();
        String redisCode = jedis.get(RedisMessageConstant.SENDTYPE_ORDER+":"+telephone);
        if(redisCode != null && redisCode.equals(validateCode)){
            //验证码正确，可以预约
            //删除redis中的验证码
            jedis.del(RedisMessageConstant.SENDTYPE_ORDER+":"+telephone);
            return orderService.saveOrder(map);
        }
        return new Result(false, MessageConstant.VALIDATECODE_ERROR);
    }
}
